home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Mac Power 1997 December
/
MACPOWER-1997-12.ISO.7z
/
MACPOWER-1997-12.ISO
/
AMUG
/
PROGRAMMING
/
Raven 1.2 Examples.sit
/
Raven 1.2 Examples
/
Quill
/
Source
/
ResourceNode.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
1997-01-31
|
6KB
|
246 lines
/*
* File: ResourceNode.cpp
* Summary: Abstract base class CResourceTable nodes.
* Written by: Jesse Jones
*
* Copyright ゥ 1997 Jesse Jones.
* For conditions of distribution and use, see copyright notice in ZTypes.h
*
* Change History (most recent first):
*
* <-> 1/17/96 JDJ Created
*/
#include "ResourceNode.h"
#include <ZContextMenu.h>
#include <ZHierarchicalTable.h>
#include <ZIntConversions.h>
#include <ZQDShapes.h>
#include <ZQuickDrawUtils.h>
#include <ZWindow.h>
#include "Constants.h"
#include "ViewContainer.h"
//-----------------------------------
// Constants
//
const short kIDWidth = 50;
const short kNameWidth = 160;
// ===================================================================================
// class CResourceNode
// ===================================================================================
//---------------------------------------------------------------
//
// CResourceNode::~CResourceNode
//
//---------------------------------------------------------------
CResourceNode::~CResourceNode()
{
CViewContainer* container = CViewContainer::GetContainer(mRsrcMap->GetType(), mID);
if (container != nil) {
TView* top = container->GetTopView();
TWindow* window = dynamic_cast<TWindow*>(top);
window->Close();
}
}
//---------------------------------------------------------------
//
// CResourceNode::CResourceNode (THierarchicalTable*, CResourceMap*)
//
//---------------------------------------------------------------
CResourceNode::CResourceNode(THierarchicalTable* table, CResourceMap* rsrcMap) : TBaseTableNode(table, nil)
{
ASSERT(rsrcMap != nil);
mRsrcMap = rsrcMap;
mID = 0;
}
//---------------------------------------------------------------
//
// CResourceNode::CResourceNode (THierarchicalTable*, TSubNode*, CResourceMap*, ResID)
//
//---------------------------------------------------------------
CResourceNode::CResourceNode(THierarchicalTable* table, TSubNode* parent, CResourceMap* rsrcMap, ResID id) : TBaseTableNode(table, parent)
{
ASSERT(rsrcMap != nil);
ASSERT(id > 0);
mRsrcMap = rsrcMap;
mID = id;
}
//---------------------------------------------------------------
//
// CResourceNode::GetSize
//
//---------------------------------------------------------------
TLongSize CResourceNode::GetSize() const
{
TLongSize size;
size.width = kIDWidth + kNameWidth;
size.height = mTextTraits.GetFontLineHeight();
return size;
}
//---------------------------------------------------------------
//
// CResourceNode::UpdateResource
//
//---------------------------------------------------------------
void CResourceNode::UpdateResource() const
{
CViewContainer* container = CViewContainer::GetContainer(mRsrcMap->GetType(), mID);
if (container != nil)
container->UpdateResource();
}
#pragma mark ハ
//---------------------------------------------------------------
//
// CResourceNode::OnDraw
//
//---------------------------------------------------------------
void CResourceNode::OnDraw(TCanvas& canvas, const TRect& cellBounds)
{
TTextTrait traits = mTextTraits;
if (mRsrcMap->IsDirty(mID)) {
STextTrait traitsRecord = mTextTraits.GetTraits();
traitsRecord.style = underline;
traits = traitsRecord;
}
TRect bounds = cellBounds;
bounds.right = bounds.left + kIDWidth;
string text = ShortToStr(mID);
text = TruncateText(text, bounds.GetWidth()); // ・・・ハshould take into account text traits...
TTextShape::Draw(canvas, text, bounds, traits);
bounds.left = bounds.right;
bounds.right = cellBounds.right;
string name = mRsrcMap->GetResourceName(mID);
text = TruncateText(name, bounds.GetWidth(), truncEnd);
TTextShape::Draw(canvas, text, bounds, traits);
}
//---------------------------------------------------------------
//
// CResourceNode::OnMouseDown
//
//---------------------------------------------------------------
bool CResourceNode::OnMouseDown(const TMouseEvent& event)
{
if (event.GetClickCount() == 2)
this->EditResource();
return kHandled;
}
//---------------------------------------------------------------
//
// CResourceNode::OnContextMenu
//
//---------------------------------------------------------------
bool CResourceNode::OnContextMenu(const TMouseEvent& event)
{
if (!this->IsSelected()) {
mTable->SelectOneNode(this);
mTable->HandleUpdate();
}
TContextMenu* popup = new TContextMenu(mTable, event.GetGlobalPosition(), 300);
popup->Post();
return kHandled;
}
//---------------------------------------------------------------
//
// CResourceNode::OnKeyDown
//
//---------------------------------------------------------------
bool CResourceNode::OnKeyDown(const TKeyEvent& event)
{
bool handled = true;
switch (event.GetChar()) {
case kReturnChar:
case kEnterChar:
if (this->IsSelected())
this->EditResource();
break;
default:
handled = false;
}
if (!handled)
handled = Inherited::OnKeyDown(event);
return handled;
}
//---------------------------------------------------------------
//
// CResourceNode::OnMenuCommand
//
//---------------------------------------------------------------
bool CResourceNode::OnMenuCommand(const MenuCommand& command)
{
bool handled = true;
if (command == kEditCmd) { // from context menu
if (this->IsSelected())
this->EditResource();
} else
handled = Inherited::OnMenuCommand(command);
return handled;
}
//---------------------------------------------------------------
//
// CResourceNode::OnCommandStatus
//
//---------------------------------------------------------------
bool CResourceNode::OnCommandStatus(const MenuCommand& command, SCommandStatus& status)
{
bool handled = true;
if (command == kEditCmd)
status.enabled = true;
else
handled = Inherited::OnCommandStatus(command, status);
return handled;
}